home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Tools 2
/
Amiga Tools 2.iso
/
tools
/
jade
/
src
/
amiga_client.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-09
|
3KB
|
117 lines
/* amiga_client.c -- client program to communicate with amiga_server.c
Copyright (C) 1993, 1994 John Harper <jsh@ukc.ac.uk>
This file is part of Jade.
Jade is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Jade is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Jade; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <clib/exec_protos.h>
#include <exec/ports.h>
#include <clib/dos_protos.h>
#include "amiga_server.h"
int
main(int argc, char *argv[])
{
u_long linenum;
u_long result = 0;
argc--; argv++;
if(argc == 0)
{
fprintf(stderr, "usage: jadeclient { [+LINE-NUMBER] FILE-NAME }...\n");
return(0);
}
while(result == 0 && argc > 0)
{
result = 5;
if(argc >= 1 && **argv == '+')
{
linenum = strtol(argv[0], NULL, 0);
if(linenum <= 0)
linenum = 1;
argc--; argv++;
}
else
linenum = 1;
if(argc > 0)
{
/* this should be in public mem really */
char buf[512];
if(getcwd(buf, 511))
{
if(AddPart(buf, *argv, 511))
{
struct MsgPort *mp;
mp = CreateMsgPort();
if(mp)
{
char domsg = 0;
/* this should be in public mem really */
struct clientmsg cm;
struct MsgPort *servport;
cm.cm_msg.mn_Length = sizeof(cm);
cm.cm_msg.mn_ReplyPort = mp;
cm.cm_file = buf;
cm.cm_num = linenum;
Forbid();
servport = FindPort(JADE_PORT_NAME);
if(!servport)
{
/* Have to be careful with the forbid/permit, must
ensure that no other tasks are running when we
locate the port. */
Permit();
fprintf(stderr, "Jade not running, waiting...");
fflush(stderr);
Forbid();
do {
Permit();
sleep(1);
Forbid();
} while(!(servport = FindPort(JADE_PORT_NAME)));
domsg = 1;
}
PutMsg(servport, &cm.cm_msg);
Permit();
if(domsg)
fprintf(stderr, "okay\n");
WaitPort(mp);
GetMsg(mp); /* is this needed? */
result = cm.cm_num;
DeleteMsgPort(mp);
}
else
fprintf(stderr, "jadeclient: can't CreateMsgPort()\n");
}
else
fprintf(stderr, "jadeclient: internal buffer overflow\n");
}
else
fprintf(stderr, "jadeclient: internal buffer overflow\n");
}
argc--; argv++;
/* a short pause is nice. */
if(argc > 0)
sleep(1);
}
return(result);
}